﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.RRHH
{
    public partial class GUIReporteAsistencia : Form
    {
    	private Form ventanaPopUp;
    	private List<BEEmpleado> listaEmp;
    	private List<string[]> listaFinal;
    	private DateTime inicio;
    	private DateTime fin;
    	
        public GUIReporteAsistencia()
        {
        	try
        	{
	            InitializeComponent();
	            this.listaFinal = null;
	            
	            this.nombreTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasTB);
	            this.apPaternoTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasTB);
	            this.apMaternoTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasTB);
	            this.docIdentidadTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
	            
	            this.cargoCB.Items.AddRange(new object[] {
										"<Seleccionar>"});
				this.cargoCB.Text = "<Seleccionar>";
        	}
        	catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
        }

        private void cerrarPopUp(object sender, EventArgs e){
        	try
        	{
				this.ventanaPopUp = null;
        	}
        	catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
		}
        
        void buscarClick(object sender, EventArgs e)
        {
        	if (this.fechaFinDTP.Value < this.fechaInicioDTP.Value)
        	{
        		MessageBox.Show("La fecha de inicio no puede ser mayor a la fecha de fin.","Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        	}
        	else
        	{
	        	try
	        	{
					BLEmpleado bl = new BLEmpleado();
					List<BEEmpleado> be = new List<BEEmpleado>();
					
					List<String> datos = new List<String>();
					datos.Add(nombreTB.Text);
					datos.Add(apPaternoTB.Text);
					datos.Add(apMaternoTB.Text);
					datos.Add(areaCB.Text);
					datos.Add(cargoCB.Text);
					datos.Add(docIdentidadTB.Text);
					datos.Add(sexoCB.Text);
					for (int i=0; i<datos.Count; i++)
					{
						if ((datos[i] == null) || (datos[i] == "<Seleccionar>"))
							datos[i] = "";
					}
					be = bl.buscarEmpleado(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5],
					                       datos[6]);
					if (be != null)
					{
						this.listaEmp = be;
						this.listaFinal = new List<string[]>();
						
						if (listaFinal != null)
						{
							BLAsistenciaDiaria blA = new BLAsistenciaDiaria();
							foreach(BEEmpleado emp in be)
							{
								List<string[]> res = new List<string[]>();
								res = blA.buscarAsistencia(emp, fechaInicioDTP.Value, fechaFinDTP.Value);
								
								if (res != null)
								{
									foreach(string[] res2 in res)
									{
										this.listaFinal.Add(res2);
									}
								}
							}
							if (ventanaPopUp == null){				
								GUIMostrarReporteAsistencia ventanaReporteAsistencia = new GUIMostrarReporteAsistencia();
		        				ventanaReporteAsistencia.Lista = this.listaFinal;
								this.ventanaPopUp = ventanaReporteAsistencia;
								this.ventanaPopUp.Closed += new System.EventHandler(this.cerrarPopUp);
								this.ventanaPopUp.ShowDialog();
							}
						}
						
					}
					else
					{
						MessageBox.Show("No hay resultados para el reporte.","Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
					}
				}
	        	catch (Exception ex)
				{
					MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
				}
        	}
        }
        
        void habilitarCargo(object sender, EventArgs e)
        {
        	try
			{
	        	if (areaCB.Text != "<Seleccionar>")
	        	{
	        		this.sexoCB.Text = "<Seleccionar>";
	        		
	        		this.cargoCB.Enabled = true;
	        		this.cargoCB.Items.Clear();
	        		this.cargoCB.Items.AddRange(new object[] {
										"<Seleccionar>"});
	        		
	        		BLCargo bl = new BLCargo();
	        		  		 
	        		List<BECargo> lista = bl.obtenerCargo(this.areaCB.Text);
	        		
	        		if (lista != null)
		        	{
	        			for(int i=0; i<lista.Count; i++)
	        				this.cargoCB.Items.Add(lista[i].Descripcion);
	        			this.cargoCB.Text = "<Seleccionar>";
		        	}
		        	else
		        	{
		        		//MessageBox.Show("Error cargando datos de la BD","Error");
		        	}
		        }
	        	else
	        	{
	        		this.cargoCB.Enabled = false;
	        	}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
        }
        
        void fechaInicioValueChanged(object sender, EventArgs e)
        {	
        	if (fechaInicioDTP.Value > fechaFinDTP.Value)
        	{
        		fechaInicioDTP.Value = fechaFinDTP.Value;
        		MessageBox.Show("No puede ingresar un valor mayor a la fecha de fin.","Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        	}
        	else if (fechaInicioDTP.Value > DateTime.Now)
        	{
        		fechaInicioDTP.Value = fechaFinDTP.Value;
        		MessageBox.Show("No puede ingresar un valor mayor a la fecha actual "+DateTime.Today.ToShortDateString(),"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        	}
        	else if ((fechaInicioDTP.Value <= DateTime.Now) && (fechaInicioDTP.Value <= fechaFinDTP.Value))
        	{
        		this.inicio = this.fechaInicioDTP.Value; 
        	}
        }
        
        void fechaFinValueChanged(object sender, EventArgs e)
        {
        	if (fechaInicioDTP.Value > fechaFinDTP.Value)
        	{
        		fechaInicioDTP.Value = fechaFinDTP.Value;
        		//MessageBox.Show("No puede ingresar un valor mayor a la fecha de fin.","Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        	}
        	else if (fechaFinDTP.Value > DateTime.Now)
        	{
        		fechaFinDTP.Value = DateTime.Now;
        		MessageBox.Show("No puede ingresar un valor mayor a la fecha actual "+DateTime.Today.ToShortDateString(),"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);	
        	}
        	else if (fechaFinDTP.Value <= DateTime.Now)
        	{
        		this.fin = this.fechaFinDTP.Value; 
        	}
        }

        void GUIReporteAsistenciaLoad(object sender, EventArgs e)
        {
			try
			{
				this.inicio = this.fechaInicioDTP.Value;
				this.fin = this.fechaFinDTP.Value;
			
	        	this.sexoCB.Text = "<Seleccionar>";
				BLArea bl = new BLArea();
	  	
	        	List<BEArea> lista = bl.obtenerArea();
	   	
	          	if (lista != null)
	        	{
	          		for(int i=0; i<lista.Count; i++)
	        			this.areaCB.Items.Add(lista[i].Descripcion);
	          		this.areaCB.Text = "<Seleccionar>";
	        	}
	        	else
	        	{
	        		//MessageBox.Show("Error cargando datos de la BD","Error");
	        	}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}			
        }
        
        void limpiarClick(object sender, EventArgs e)
        {
        	try
			{
				this.nombreTB.Text = "";
				this.apPaternoTB.Text = "";
				this.apMaternoTB.Text = "";
				this.areaCB.Text = "<Seleccionar>";
				this.cargoCB.Text = "<Seleccionar>";
				this.docIdentidadTB.Text = "";
				this.sexoCB.Text = "<Seleccionar>";
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: " + ex,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
			}
        }
    }
}
